我们知道deployment是通过管理ReplicaSet来进行管理pod的, 但是DaemonSet控制器直接控制的就是pod,那么他是如何进行版本的维护呢
在kubernetes v1.7之后 有一个对象是ControllerRevision
是专门用来管理某种Controller对象的版本的
比如某个DaemonSet的名字为A
我们查看这个 DaemonSet controller的版本
1 | kubelet get controllerrevision -n kube-system -l name=A |
这里会获得一个版本名字 , 命名规则是[controller-name]-[hash值], 这里获取的版本名字就是A-XXX
查看这个controllerRevision对象
1 | kubelet describe controllerrevision A-XXX -n kube-system |
可以看到返回的详细信息, 里面有个Data字段, 保留了该版本对应的完整的DaemonSet 的API对象,并且在Annotation字段保存了创建这个对象所使用的kubelet命令
这样在进行更新DaemonSet 版本的时候 revision的版本会从1 变成2
在回滚的时候会从2变成3 , 不会退回成1, 因为是一个新的ControllerRevision被创建了出来